A proxy server operates as an intermediary between a web server and clients requesting digital assets from the web server. Traditionally, proxy servers have used a thread, or process, per request approach because of its simplicity. In general, when the proxy server receives a request from a client, a thread is created or allocated to serve the request. The thread serves the request by sending a request for the requested digital asset to the web server, receiving the digital asset from the web server, and transferring the digital asset to the client. In order to provide improved performance, proxy servers may include a proxy cache used to store previously requested digital assets such that subsequent requests may be served directly from cache.
However, the traditional thread per request approach results in inefficiencies when serving concurrent requests for the same un-cached digital asset. For example, one approach to handling concurrent requests in a proxy server implementing the thread per request approach is to ignore inefficiencies and permit each thread to request the desired digital asset from the web server. This may be acceptable when requesting digital assets having a relatively small file size. However, when digital assets such as large images and videos are concurrently requested, the inefficiencies of the traditional thread per request approach are unacceptable.
Thus, there is a need for a proxy server and method of operation thereof for efficiently serving multiple concurrent requests for the same digital asset.